<?php

namespace Ana\AgendaBundle\Controller;

use Ana\AgendaBundle\Lib\validadores\RegistroPacienteValidador;

use Ana\AgendaBundle\Lib\AjaxAlerta;

use Ana\AgendaBundle\Entity\Paciente;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Component\HttpFoundation\Response;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;


class PacienteController extends BaseController{
    
    /**
    * 
    * @Route("/pacientes",name="pacientes",defaults={"_format": "json"})
    * @Method("GET")
    * LISTADO
    */
    public function pacientesAction(){
        $repo = $this->getRepo('Ana\AgendaBundle\Entity\Paciente');
        $pacientes = $repo->findAll();
        return $this->successAjaxResponse(array('pacientes'=>$pacientes));
    }
    
    /**
     * @Route("/paciente/{id}",name="paciente",defaults={"_format": "json"})
     * @Method("GET")
     * 
     */
    public function pacienteAction($id){
        $repo = $this->getRepo('Ana\AgendaBundle\Entity\Paciente');
        $paciente = $repo->find($id);
        return $this->successAjaxResponse(json_encode($paciente));
    }
    
    /**
    * @Route("/paciente/{id}",name="actualizar_paciente",defaults={"_format": "json"})
    * @Method("POST")
    *
    */
    public function actualizarPacienteAction($id){
        $repo = $this->getRepo('Ana\AgendaBundle\Entity\Paciente');
        $paciente = $repo->find($id);
        return $this->successAjaxResponse(json_encode($paciente));
    }
    
    
    
    /**
    * @Route("/dto/pacientes",name="dto_pacientes",defaults={"_format": "json"})
    * @Method("GET")
    *
    */
    public function dtoPacientesAction(){
        $repo = $this->getRepo('Ana\AgendaBundle\Entity\Paciente');
        $pacientes = $repo->findAll();
        return $this->successAjaxResponse(array('pacientes'=>$pacientes));
    }
    
    /**
    * @Route("/pacientes/home",name="pacientes_home")
    * @Method("GET")
    *
    */
    public function pacientesHomeAction(){
        return $this->render('AnaAgendaBundle:Paciente:pacientes.html.php');
    }
    
    /**
    * @Route("/paciente",name="formulario_nuevo_paciente",defaults={"_format": "html"})
    * @Method("GET")
    *
    */
    public function formularioNuevoPacienteAction(){
        return $this->render('AnaAgendaBundle:Paciente:paciente_formulario.html.php');
    }
    
    /**
    * @Route("/paciente",name="crear_paciente",defaults={"_format": "json"})
    * @Method("POST")
    *
    */
    public function crearPacienteAction(Request $request){
        $paciente_data = json_decode($request->getContent());
        $errores = RegistroPacienteValidador::validar($paciente_data);
        
        if(!empty($errores)){//Errores
            return $this->failAjaxResponse(array(AjaxAlerta::dangerAlert('El paciente no fue creado revise el formulario.')),array('paciente'=>$errores));
        }
        
        $paciente = new Paciente();//Creo
        $paciente->setNombre($paciente_data->nombre);
        $paciente->setApellido($paciente_data->apellido);
        $paciente->setSexo($paciente_data->sexo);
        $paciente->setNacimiento($paciente_data->nacimiento);
        
        $em = $this->getDoctrine()->getManager();//persisto
        $em->persist($paciente);
        $em->flush();
        
        return $this->successAjaxResponse(null,array(AjaxAlerta::successAlert('Paciente Creado')));//Exitoso
    }
    
    /**
    * @Route("/buscar/paciente",name="buscar_paciente",defaults={"_format": "json"})
    * @Method("GET")
    *
    */
    public function buscarPaciente(Request $request){
        $data = $request->get('busqueda');
        if(!isset($data)){
            return $this->failAjaxResponse(array(AjaxAlerta::dangerAlert('Busqueda Invalida.')));
        }
        
        $repo = $this->getRepo('Ana\AgendaBundle\Entity\Paciente');
        $pacientes = $repo->busquedaSimple($data);
        return $this->successAjaxResponse(array('pacientes'=>$pacientes));
    }
    
}
